<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: ipc::session::sync_io::Session_adapter&lt; Session &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;1.0.2</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceipc.html">ipc</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session.html">session</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session_1_1sync__io.html">sync_io</a></li><li class="navelem"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">Session_adapter</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classipc_1_1session_1_1sync__io_1_1Session__adapter-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">ipc::session::sync_io::Session_adapter&lt; Session &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Internal-use workhorse containing common elements of <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a> and <a class="el" href="classipc_1_1session_1_1sync__io_1_1Server__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Server_session types and all their SHM-awar...">Server_session_adapter</a>.  
 <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ipc::session::sync_io::Session_adapter&lt; Session &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter__inherit__graph.svg" width="332" height="131"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ipc::session::sync_io::Session_adapter&lt; Session &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter__coll__graph.svg" width="800" height="712"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1session_1_1sync__io_1_1Session__adapter_1_1Channel__open__result.html">Channel_open_result</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of result arg values from a successful passive-channel-open from a <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> invoking <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48" title="Short-hand for passive-channel-open handler.">On_channel_func</a>.  <a href="structipc_1_1session_1_1sync__io_1_1Session__adapter_1_1Channel__open__result.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:abc472aaaad1fd0f07ebb0e2be5c6ac76"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">Session_obj</a> = <a class="el" href="classipc_1_1session_1_1Session.html">Session</a></td></tr>
<tr class="memdesc:abc472aaaad1fd0f07ebb0e2be5c6ac76"><td class="mdescLeft">&#160;</td><td class="mdescRight">See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">More...</a><br /></td></tr>
<tr class="separator:abc472aaaad1fd0f07ebb0e2be5c6ac76"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47a22b38296b06d11e16b72e5e882d19"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a47a22b38296b06d11e16b72e5e882d19">Sync_io_obj</a> = <a class="el" href="classipc_1_1transport_1_1Null__peer.html">transport::Null_peer</a></td></tr>
<tr class="memdesc:a47a22b38296b06d11e16b72e5e882d19"><td class="mdescLeft">&#160;</td><td class="mdescRight">See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a47a22b38296b06d11e16b72e5e882d19">More...</a><br /></td></tr>
<tr class="separator:a47a22b38296b06d11e16b72e5e882d19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd918fba6fb3c43feefdcf7719d527c9"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acd918fba6fb3c43feefdcf7719d527c9">Async_io_obj</a> = <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">Session_obj</a></td></tr>
<tr class="memdesc:acd918fba6fb3c43feefdcf7719d527c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acd918fba6fb3c43feefdcf7719d527c9">More...</a><br /></td></tr>
<tr class="separator:acd918fba6fb3c43feefdcf7719d527c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c0cceec02c1870cf23d6788f19ed083"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a3c0cceec02c1870cf23d6788f19ed083">Channel_obj</a> = typename <a class="el" href="classipc_1_1session_1_1Session.html#a2f770785552536f3b929f293c44834d2">Session_obj::Channel_obj</a></td></tr>
<tr class="memdesc:a3c0cceec02c1870cf23d6788f19ed083"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for session-openable Channel type.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a3c0cceec02c1870cf23d6788f19ed083">More...</a><br /></td></tr>
<tr class="separator:a3c0cceec02c1870cf23d6788f19ed083"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47d8e7dccbe05a7834e4b9687b755a2b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a47d8e7dccbe05a7834e4b9687b755a2b">Mdt_reader_ptr</a> = typename <a class="el" href="classipc_1_1session_1_1Session.html#ae197d051e06be6f132e193e9ba7ab6ae">Session_obj::Mdt_reader_ptr</a></td></tr>
<tr class="memdesc:a47d8e7dccbe05a7834e4b9687b755a2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for session-open metadata reader.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a47d8e7dccbe05a7834e4b9687b755a2b">More...</a><br /></td></tr>
<tr class="separator:a47d8e7dccbe05a7834e4b9687b755a2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0028c9cad3d0d254b3cbb20d27e0c48"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48">On_channel_func</a> = <a class="el" href="namespaceipc.html#aa455c7f045059736578ca275fc1a851f">Function</a>&lt; void(<a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a3c0cceec02c1870cf23d6788f19ed083">Channel_obj</a> &amp;&amp;, <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a47d8e7dccbe05a7834e4b9687b755a2b">Mdt_reader_ptr</a> &amp;&amp;)&gt;</td></tr>
<tr class="memdesc:ab0028c9cad3d0d254b3cbb20d27e0c48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for passive-channel-open handler.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48">More...</a><br /></td></tr>
<tr class="separator:ab0028c9cad3d0d254b3cbb20d27e0c48"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ab32530e74cd4d2b2fc116baa93c02a18"><td class="memTemplParams" colspan="2">template&lt;typename On_passive_open_channel_handler , typename Task_err &gt; </td></tr>
<tr class="memitem:ab32530e74cd4d2b2fc116baa93c02a18"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab32530e74cd4d2b2fc116baa93c02a18">Session_adapter</a> (flow::log::Logger *logger_ptr, const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;cli_app_ref, const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;srv_app_ref, Task_err &amp;&amp;on_err_func, On_passive_open_channel_handler &amp;&amp;on_passive_open_channel_func)</td></tr>
<tr class="memdesc:ab32530e74cd4d2b2fc116baa93c02a18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Client_session</code> variant, forwards to its ctor of identical form, except that the handlers are replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting ones.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab32530e74cd4d2b2fc116baa93c02a18">More...</a><br /></td></tr>
<tr class="separator:ab32530e74cd4d2b2fc116baa93c02a18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93686af4c1d28eb767d1cc3ffce1794b"><td class="memTemplParams" colspan="2">template&lt;typename Task_err &gt; </td></tr>
<tr class="memitem:a93686af4c1d28eb767d1cc3ffce1794b"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93686af4c1d28eb767d1cc3ffce1794b">Session_adapter</a> (flow::log::Logger *logger_ptr, const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;cli_app_ref, const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;srv_app_ref, Task_err &amp;&amp;on_err_func)</td></tr>
<tr class="memdesc:a93686af4c1d28eb767d1cc3ffce1794b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Client_session</code> variant, forwards to its ctor of identical form, except that the handler is replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting one.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93686af4c1d28eb767d1cc3ffce1794b">More...</a><br /></td></tr>
<tr class="separator:a93686af4c1d28eb767d1cc3ffce1794b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b4dada833c59e6a63780dfaba4f704f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a8b4dada833c59e6a63780dfaba4f704f">Session_adapter</a> ()</td></tr>
<tr class="memdesc:a8b4dada833c59e6a63780dfaba4f704f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forwards to the <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> default ctor.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a8b4dada833c59e6a63780dfaba4f704f">More...</a><br /></td></tr>
<tr class="separator:a8b4dada833c59e6a63780dfaba4f704f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9ff4515c84ff66ae8eafbf102c83df0"><td class="memTemplParams" colspan="2">template&lt;typename Event_wait_func_t &gt; </td></tr>
<tr class="memitem:ac9ff4515c84ff66ae8eafbf102c83df0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0">start_ops</a> (Event_wait_func_t &amp;&amp;ev_wait_func)</td></tr>
<tr class="memdesc:ac9ff4515c84ff66ae8eafbf102c83df0"><td class="mdescLeft">&#160;</td><td class="mdescRight">See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0">More...</a><br /></td></tr>
<tr class="separator:ac9ff4515c84ff66ae8eafbf102c83df0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6936f814627243f273d700750def19e2"><td class="memTemplParams" colspan="2">template&lt;typename Create_ev_wait_hndl_func &gt; </td></tr>
<tr class="memitem:a6936f814627243f273d700750def19e2"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6936f814627243f273d700750def19e2">replace_event_wait_handles</a> (const Create_ev_wait_hndl_func &amp;create_ev_wait_hndl_func)</td></tr>
<tr class="memdesc:a6936f814627243f273d700750def19e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6936f814627243f273d700750def19e2">More...</a><br /></td></tr>
<tr class="separator:a6936f814627243f273d700750def19e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7fcf6915de1764b69d0d49abb20666e"><td class="memTemplParams" colspan="2">template&lt;typename Task_err , typename On_passive_open_channel_handler &gt; </td></tr>
<tr class="memitem:ae7fcf6915de1764b69d0d49abb20666e"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e">init_handlers</a> (Task_err &amp;&amp;on_err_func_arg, On_passive_open_channel_handler &amp;&amp;on_passive_open_channel_func_arg)</td></tr>
<tr class="memdesc:ae7fcf6915de1764b69d0d49abb20666e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Server_session</code> variant, forwards to its method of identical form, except that the handlers are replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting ones.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e">More...</a><br /></td></tr>
<tr class="separator:ae7fcf6915de1764b69d0d49abb20666e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af738e1f4be56643da0987fc1c0660e67"><td class="memTemplParams" colspan="2">template&lt;typename Task_err &gt; </td></tr>
<tr class="memitem:af738e1f4be56643da0987fc1c0660e67"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af738e1f4be56643da0987fc1c0660e67">init_handlers</a> (Task_err &amp;&amp;on_err_func_arg)</td></tr>
<tr class="memdesc:af738e1f4be56643da0987fc1c0660e67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Server_session</code> variant, forwards to its method of identical form, except that the handlers are replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting ones.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af738e1f4be56643da0987fc1c0660e67">More...</a><br /></td></tr>
<tr class="separator:af738e1f4be56643da0987fc1c0660e67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab779934fe031f22ed0223610cc4c9cf0"><td class="memItemLeft" align="right" valign="top">flow::log::Logger *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab779934fe031f22ed0223610cc4c9cf0">get_logger</a> () const</td></tr>
<tr class="memdesc:ab779934fe031f22ed0223610cc4c9cf0"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <code>flow::log::Log_context</code>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab779934fe031f22ed0223610cc4c9cf0">More...</a><br /></td></tr>
<tr class="separator:ab779934fe031f22ed0223610cc4c9cf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a119e8c2b3a76498aa239c43e050fd349"><td class="memItemLeft" align="right" valign="top">const flow::log::Component &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a119e8c2b3a76498aa239c43e050fd349">get_log_component</a> () const</td></tr>
<tr class="memdesc:a119e8c2b3a76498aa239c43e050fd349"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <code>flow::log::Log_context</code>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a119e8c2b3a76498aa239c43e050fd349">More...</a><br /></td></tr>
<tr class="separator:a119e8c2b3a76498aa239c43e050fd349"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a6a7dada7f109cd5bd999d3c08e20b179"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a6a7dada7f109cd5bd999d3c08e20b179"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6a7dada7f109cd5bd999d3c08e20b179">async_wait</a> (Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a6a7dada7f109cd5bd999d3c08e20b179"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forwards to the <a class="el" href="namespaceipc_1_1util_1_1sync__io.html#aa0b9a3cc6bdc7dedbef4f9e06851aa24" title="In sync_io pattern, concrete type storing user-supplied function invoked by pattern-implementing ipc:...">util::sync_io::Event_wait_func</a> saved in <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6a7dada7f109cd5bd999d3c08e20b179">More...</a><br /></td></tr>
<tr class="separator:a6a7dada7f109cd5bd999d3c08e20b179"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a48b4b10dcb605860a58d2a394ba9c35b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a48b4b10dcb605860a58d2a394ba9c35b">init_pipe</a> (<a class="el" href="namespaceipc_1_1util.html#aaf368acf8243bb25de3eef4e836c15de">util::Pipe_reader</a> *reader, <a class="el" href="namespaceipc_1_1util.html#a844d5ca9c17b672644fc8d9dbe758db0">util::Pipe_writer</a> *writer, <a class="el" href="classipc_1_1util_1_1sync__io_1_1Asio__waitable__native__handle.html">util::sync_io::Asio_waitable_native_handle</a> *ev_wait_hndl)</td></tr>
<tr class="memdesc:a48b4b10dcb605860a58d2a394ba9c35b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility that sets up an IPC-pipe in the given peer objects as well as loading a watcher-descriptor object for the read-end.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a48b4b10dcb605860a58d2a394ba9c35b">More...</a><br /></td></tr>
<tr class="separator:a48b4b10dcb605860a58d2a394ba9c35b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93fc44829d49b7633d1dddfab7998f78"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">Session_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93fc44829d49b7633d1dddfab7998f78">core</a> ()</td></tr>
<tr class="memdesc:a93fc44829d49b7633d1dddfab7998f78"><td class="mdescLeft">&#160;</td><td class="mdescRight">The adapted mutable <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93fc44829d49b7633d1dddfab7998f78">More...</a><br /></td></tr>
<tr class="separator:a93fc44829d49b7633d1dddfab7998f78"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09c4ae70bece68246e64449169787a6b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">Session_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a09c4ae70bece68246e64449169787a6b">core</a> () const</td></tr>
<tr class="memdesc:a09c4ae70bece68246e64449169787a6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">The adapted mutable <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a09c4ae70bece68246e64449169787a6b">More...</a><br /></td></tr>
<tr class="separator:a09c4ae70bece68246e64449169787a6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-types" name="pri-types"></a>
Private Types</h2></td></tr>
<tr class="memitem:ae6a66562d53b886d72e3edc875911b11"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae6a66562d53b886d72e3edc875911b11">Channel_open_result_q</a> = std::queue&lt; typename <a class="el" href="structipc_1_1session_1_1sync__io_1_1Session__adapter_1_1Channel__open__result.html#a66d9fad46eb4c59bee360b92d1763b92">Channel_open_result::Ptr</a> &gt;</td></tr>
<tr class="memdesc:ae6a66562d53b886d72e3edc875911b11"><td class="mdescLeft">&#160;</td><td class="mdescRight">Queue of <a class="el" href="structipc_1_1session_1_1sync__io_1_1Session__adapter_1_1Channel__open__result.html" title="Set of result arg values from a successful passive-channel-open from a Session_obj invoking On_channe...">Channel_open_result</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae6a66562d53b886d72e3edc875911b11">More...</a><br /></td></tr>
<tr class="separator:ae6a66562d53b886d72e3edc875911b11"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a49853cc0cc44d2bb3ee20823d2b02ff5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a49853cc0cc44d2bb3ee20823d2b02ff5">on_ev_channel_open</a> ()</td></tr>
<tr class="memdesc:a49853cc0cc44d2bb3ee20823d2b02ff5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signaled by the function returned by <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3" title="Returns the proper on-passive-channel-open handler to set up on the underlying Session_obj (Client_se...">on_channel_func_sio()</a>, it returns the IPC-pipe to steady-state (empty, not readable), invokes the original user handler passed to <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3" title="Returns the proper on-passive-channel-open handler to set up on the underlying Session_obj (Client_se...">on_channel_func_sio()</a>, and lastly begins the next async-wait for the procedure.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a49853cc0cc44d2bb3ee20823d2b02ff5">More...</a><br /></td></tr>
<tr class="separator:a49853cc0cc44d2bb3ee20823d2b02ff5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5bbcf8b33bc02ccb371449692d09e642"><td class="memItemLeft" align="right" valign="top">flow::async::Task_asio_err&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a5bbcf8b33bc02ccb371449692d09e642">on_err_func_sio</a> ()</td></tr>
<tr class="memdesc:a5bbcf8b33bc02ccb371449692d09e642"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the proper on-error handler to set up on the underlying <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> (<code>Client_session</code>: via ctor; <code>Server_session</code>: via <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a></code>).  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a5bbcf8b33bc02ccb371449692d09e642">More...</a><br /></td></tr>
<tr class="separator:a5bbcf8b33bc02ccb371449692d09e642"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a527ef097783127e73184258166a891a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48">On_channel_func</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3">on_channel_func_sio</a> ()</td></tr>
<tr class="memdesc:a527ef097783127e73184258166a891a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the proper on-passive-channel-open handler to set up on the underlying <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> (<code>Client_session</code>: via ctor; <code>Server_session</code>: via <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a></code> 2-arg form).  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3">More...</a><br /></td></tr>
<tr class="separator:a527ef097783127e73184258166a891a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:af0b0e94d115b13c6a5b5bfde46702320"><td class="memItemLeft" align="right" valign="top">flow::util::Task_engine&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af0b0e94d115b13c6a5b5bfde46702320">m_nb_task_engine</a></td></tr>
<tr class="memdesc:af0b0e94d115b13c6a5b5bfde46702320"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <code>Task_engine</code> for <code>m_ready_*</code>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af0b0e94d115b13c6a5b5bfde46702320">More...</a><br /></td></tr>
<tr class="separator:af0b0e94d115b13c6a5b5bfde46702320"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af305212e9de780ac16f4bfed4a666f7f"><td class="memItemLeft" align="right" valign="top">flow::util::Task_engine&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af305212e9de780ac16f4bfed4a666f7f">m_ev_hndl_task_engine_unused</a></td></tr>
<tr class="memdesc:af305212e9de780ac16f4bfed4a666f7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <code>Task_engine</code> for <code>m_ev_wait_hndl_*</code>, unless it is replaced via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6936f814627243f273d700750def19e2" title="See, e.g., Client_session_adapter.">replace_event_wait_handles()</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af305212e9de780ac16f4bfed4a666f7f">More...</a><br /></td></tr>
<tr class="separator:af305212e9de780ac16f4bfed4a666f7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ea8f9f021af50050dbb88bd14978e24"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1util.html#aaf368acf8243bb25de3eef4e836c15de">util::Pipe_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24">m_ready_reader_err</a></td></tr>
<tr class="memdesc:a6ea8f9f021af50050dbb88bd14978e24"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read-end of IPC-pipe used by <code>*this</code> used to detect that the error-wait has completed.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24">More...</a><br /></td></tr>
<tr class="separator:a6ea8f9f021af50050dbb88bd14978e24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22c47810c9273ce7f86b85f51c474b9f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1util.html#a844d5ca9c17b672644fc8d9dbe758db0">util::Pipe_writer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a22c47810c9273ce7f86b85f51c474b9f">m_ready_writer_err</a></td></tr>
<tr class="memdesc:a22c47810c9273ce7f86b85f51c474b9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write-end of IPC-pipe together with <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24" title="Read-end of IPC-pipe used by *this used to detect that the error-wait has completed.">m_ready_reader_err</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a22c47810c9273ce7f86b85f51c474b9f">More...</a><br /></td></tr>
<tr class="separator:a22c47810c9273ce7f86b85f51c474b9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23a9d957374f24739147bbda694e7b8b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1util_1_1sync__io_1_1Asio__waitable__native__handle.html">util::sync_io::Asio_waitable_native_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a23a9d957374f24739147bbda694e7b8b">m_ev_wait_hndl_err</a></td></tr>
<tr class="memdesc:a23a9d957374f24739147bbda694e7b8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Descriptor waitable by outside event loop async-waits &ndash; storing the same <code>Native_handle</code> as (and thus being used to wait on events from) <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24" title="Read-end of IPC-pipe used by *this used to detect that the error-wait has completed.">m_ready_reader_err</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a23a9d957374f24739147bbda694e7b8b">More...</a><br /></td></tr>
<tr class="separator:a23a9d957374f24739147bbda694e7b8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95ca5ad4d856f3921b9e0b3accf7b618"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1util.html#aaf368acf8243bb25de3eef4e836c15de">util::Pipe_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618">m_ready_reader_chan</a></td></tr>
<tr class="memdesc:a95ca5ad4d856f3921b9e0b3accf7b618"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read-end of IPC-pipe used by <code>*this</code> used to detect that a channel-open-wait has completed.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618">More...</a><br /></td></tr>
<tr class="separator:a95ca5ad4d856f3921b9e0b3accf7b618"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef11d364d6df923acff043cd7b3bee1d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1util.html#a844d5ca9c17b672644fc8d9dbe758db0">util::Pipe_writer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d">m_ready_writer_chan</a></td></tr>
<tr class="memdesc:aef11d364d6df923acff043cd7b3bee1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write-end of IPC-pipe together with <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d">More...</a><br /></td></tr>
<tr class="separator:aef11d364d6df923acff043cd7b3bee1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e4d1659efd084274bcea1bbcee88533"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1util_1_1sync__io_1_1Asio__waitable__native__handle.html">util::sync_io::Asio_waitable_native_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a8e4d1659efd084274bcea1bbcee88533">m_ev_wait_hndl_chan</a></td></tr>
<tr class="memdesc:a8e4d1659efd084274bcea1bbcee88533"><td class="mdescLeft">&#160;</td><td class="mdescRight">Descriptor waitable by outside event loop async-waits &ndash; storing the same <code>Native_handle</code> as (and thus being used to wait on events from) <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a8e4d1659efd084274bcea1bbcee88533">More...</a><br /></td></tr>
<tr class="separator:a8e4d1659efd084274bcea1bbcee88533"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad234c5fbbbd01b0c8b3f3edfa02f1cb0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1util_1_1sync__io.html#aa0b9a3cc6bdc7dedbef4f9e06851aa24">util::sync_io::Event_wait_func</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad234c5fbbbd01b0c8b3f3edfa02f1cb0">m_ev_wait_func</a></td></tr>
<tr class="memdesc:ad234c5fbbbd01b0c8b3f3edfa02f1cb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function (set forever in <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a>) through which we invoke the outside event loop's async-wait facility for descriptors/events relevant to our ops.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad234c5fbbbd01b0c8b3f3edfa02f1cb0">More...</a><br /></td></tr>
<tr class="separator:ad234c5fbbbd01b0c8b3f3edfa02f1cb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00009e3a7b3a9643af82469ec9647679"><td class="memItemLeft" align="right" valign="top">flow::async::Task_asio_err&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a00009e3a7b3a9643af82469ec9647679">m_on_err_func</a></td></tr>
<tr class="memdesc:a00009e3a7b3a9643af82469ec9647679"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>on_err_func</code> from <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a>; <code>.empty()</code> until then.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a00009e3a7b3a9643af82469ec9647679">More...</a><br /></td></tr>
<tr class="separator:a00009e3a7b3a9643af82469ec9647679"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2a771da81e49f5e38774e087c448c75"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48">On_channel_func</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af2a771da81e49f5e38774e087c448c75">m_on_channel_func_or_empty</a></td></tr>
<tr class="memdesc:af2a771da81e49f5e38774e087c448c75"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>on_passive_open_channel_func_or_empty</code> from <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a> (possibly <code>.empty()</code> if not supplied); until then <code>.empty()</code>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af2a771da81e49f5e38774e087c448c75">More...</a><br /></td></tr>
<tr class="separator:af2a771da81e49f5e38774e087c448c75"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a698532c47d2962e7e60dc804ac5c4e53"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a698532c47d2962e7e60dc804ac5c4e53">m_target_err_code_err</a></td></tr>
<tr class="memdesc:a698532c47d2962e7e60dc804ac5c4e53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Result given to (or about to be given to) <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a00009e3a7b3a9643af82469ec9647679" title="on_err_func from init_handlers(); .empty() until then.">m_on_err_func</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a698532c47d2962e7e60dc804ac5c4e53">More...</a><br /></td></tr>
<tr class="separator:a698532c47d2962e7e60dc804ac5c4e53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad26ef2d688edc711821951d00101ccae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae6a66562d53b886d72e3edc875911b11">Channel_open_result_q</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad26ef2d688edc711821951d00101ccae">m_target_channel_open_q</a></td></tr>
<tr class="memdesc:ad26ef2d688edc711821951d00101ccae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Queue of <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48" title="Short-hand for passive-channel-open handler.">On_channel_func</a> handler arg sets received from async-I/O <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> &ndash; meaning the <code><a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a></code>, in unspecified background thread, informing us (which we signal via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d" title="Write-end of IPC-pipe together with m_ready_reader_chan.">m_ready_writer_chan</a>) a channel has been passively open &ndash; and not yet fed to <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af2a771da81e49f5e38774e087c448c75" title="on_passive_open_channel_func_or_empty from init_handlers() (possibly .empty() if not supplied); until...">m_on_channel_func_or_empty</a>.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad26ef2d688edc711821951d00101ccae">More...</a><br /></td></tr>
<tr class="separator:ad26ef2d688edc711821951d00101ccae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7212b0336f96d32d6ab36ef43e16135a"><td class="memItemLeft" align="right" valign="top">flow::util::Mutex_non_recursive&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a7212b0336f96d32d6ab36ef43e16135a">m_target_channel_open_q_mutex</a></td></tr>
<tr class="memdesc:a7212b0336f96d32d6ab36ef43e16135a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Protects <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad26ef2d688edc711821951d00101ccae" title="Queue of On_channel_func handler arg sets received from async-I/O Session_obj – meaning the Session,...">m_target_channel_open_q</a>, accessed from user async-wait-reporter thread; and <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> worker thread.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a7212b0336f96d32d6ab36ef43e16135a">More...</a><br /></td></tr>
<tr class="separator:a7212b0336f96d32d6ab36ef43e16135a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acff016523b1b1cff00f6d44a47cc9426"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acd918fba6fb3c43feefdcf7719d527c9">Async_io_obj</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acff016523b1b1cff00f6d44a47cc9426">m_async_io</a></td></tr>
<tr class="memdesc:acff016523b1b1cff00f6d44a47cc9426"><td class="mdescLeft">&#160;</td><td class="mdescRight">This guy does all the work. In our dtor this will be destroyed (hence thread stopped) first-thing.  <a href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acff016523b1b1cff00f6d44a47cc9426">More...</a><br /></td></tr>
<tr class="separator:acff016523b1b1cff00f6d44a47cc9426"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a>&gt;<br />
class ipc::session::sync_io::Session_adapter&lt; Session &gt;</div><p >Internal-use workhorse containing common elements of <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a> and <a class="el" href="classipc_1_1session_1_1sync__io_1_1Server__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Server_session types and all their SHM-awar...">Server_session_adapter</a>. </p>
<p >As such it contains the machinery for:</p><ul>
<li>storing (deriving from) the adapted <code><a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a></code> as accessible via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93fc44829d49b7633d1dddfab7998f78" title="The adapted mutable Session_obj.">Session_adapter::core()</a>;</li>
<li>adapting async-I/O on-error and on-passive-channel-open (if enabled) events to <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern;</li>
<li>storing and invoking the central <a class="el" href="namespaceipc_1_1util_1_1sync__io.html#aa0b9a3cc6bdc7dedbef4f9e06851aa24" title="In sync_io pattern, concrete type storing user-supplied function invoked by pattern-implementing ipc:...">util::sync_io::Event_wait_func</a> supplied by the user;</li>
<li>type aliases common to all sessions.</li>
</ul>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname"><a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a></td><td>See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00051">51</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="acd918fba6fb3c43feefdcf7719d527c9" name="acd918fba6fb3c43feefdcf7719d527c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd918fba6fb3c43feefdcf7719d527c9">&#9670;&nbsp;</a></span>Async_io_obj</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Async_io_obj =  <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">Session_obj</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00062">62</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a3c0cceec02c1870cf23d6788f19ed083" name="a3c0cceec02c1870cf23d6788f19ed083"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c0cceec02c1870cf23d6788f19ed083">&#9670;&nbsp;</a></span>Channel_obj</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Channel_obj =  typename <a class="el" href="classipc_1_1session_1_1Session.html#a2f770785552536f3b929f293c44834d2">Session_obj::Channel_obj</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for session-openable Channel type. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00065">65</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="ae6a66562d53b886d72e3edc875911b11" name="ae6a66562d53b886d72e3edc875911b11"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6a66562d53b886d72e3edc875911b11">&#9670;&nbsp;</a></span>Channel_open_result_q</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Channel_open_result_q =  std::queue&lt;typename <a class="el" href="structipc_1_1session_1_1sync__io_1_1Session__adapter_1_1Channel__open__result.html#a66d9fad46eb4c59bee360b92d1763b92">Channel_open_result::Ptr</a>&gt;</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Queue of <a class="el" href="structipc_1_1session_1_1sync__io_1_1Session__adapter_1_1Channel__open__result.html" title="Set of result arg values from a successful passive-channel-open from a Session_obj invoking On_channe...">Channel_open_result</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00263">263</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a47d8e7dccbe05a7834e4b9687b755a2b" name="a47d8e7dccbe05a7834e4b9687b755a2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47d8e7dccbe05a7834e4b9687b755a2b">&#9670;&nbsp;</a></span>Mdt_reader_ptr</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Mdt_reader_ptr =  typename <a class="el" href="classipc_1_1session_1_1Session.html#ae197d051e06be6f132e193e9ba7ab6ae">Session_obj::Mdt_reader_ptr</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for session-open metadata reader. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00068">68</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="ab0028c9cad3d0d254b3cbb20d27e0c48" name="ab0028c9cad3d0d254b3cbb20d27e0c48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0028c9cad3d0d254b3cbb20d27e0c48">&#9670;&nbsp;</a></span>On_channel_func</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::On_channel_func =  <a class="el" href="namespaceipc.html#aa455c7f045059736578ca275fc1a851f">Function</a>&lt;void (<a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a3c0cceec02c1870cf23d6788f19ed083">Channel_obj</a>&amp;&amp;, <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a47d8e7dccbe05a7834e4b9687b755a2b">Mdt_reader_ptr</a>&amp;&amp;)&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for passive-channel-open handler. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00071">71</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="abc472aaaad1fd0f07ebb0e2be5c6ac76" name="abc472aaaad1fd0f07ebb0e2be5c6ac76"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc472aaaad1fd0f07ebb0e2be5c6ac76">&#9670;&nbsp;</a></span>Session_obj</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Session_obj =  <a class="el" href="classipc_1_1session_1_1Session.html">Session</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00057">57</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a47a22b38296b06d11e16b72e5e882d19" name="a47a22b38296b06d11e16b72e5e882d19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47a22b38296b06d11e16b72e5e882d19">&#9670;&nbsp;</a></span>Sync_io_obj</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Sync_io_obj =  <a class="el" href="classipc_1_1transport_1_1Null__peer.html">transport::Null_peer</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00060">60</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ab32530e74cd4d2b2fc116baa93c02a18" name="ab32530e74cd4d2b2fc116baa93c02a18"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab32530e74cd4d2b2fc116baa93c02a18">&#9670;&nbsp;</a></span>Session_adapter() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename On_passive_open_channel_handler , typename Task_err &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Session_adapter </td>
          <td>(</td>
          <td class="paramtype">flow::log::Logger *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>cli_app_ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;&#160;</td>
          <td class="paramname"><em>srv_app_ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Task_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_err_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">On_passive_open_channel_handler &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_passive_open_channel_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Client_session</code> variant, forwards to its ctor of identical form, except that the handlers are replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting ones. </p>
<p >Do not use <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a> after this ctor, as that is for <code>Server_session</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
    <tr><td class="paramname">cli_app_ref</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
    <tr><td class="paramname">srv_app_ref</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
    <tr><td class="paramname">on_err_func</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. However in <code>*this</code> case this shall be invoked &ndash; though still only following successful <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93fc44829d49b7633d1dddfab7998f78" title="The adapted mutable Session_obj.">core()</a>-&gt;sync_connect()</code> as usual &ndash; according to <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern, synchronously inside an async-wait performed by you and reported via <code>(*on_active_ev_func)()</code>. </td></tr>
    <tr><td class="paramname">on_passive_open_channel_func</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. However in <code>*this</code> case this shall be invoked &ndash; though still only following successful <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a93fc44829d49b7633d1dddfab7998f78" title="The adapted mutable Session_obj.">core()</a>-&gt;sync_connect()</code> as usual &ndash; according to <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern, synchronously inside an async-wait performed by you and reported via <code>(*on_active_ev_func)()</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">On_passive_open_channel_handler</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
    <tr><td class="paramname">Task_err</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00436">436</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="session__adapter_8hpp_source.html#l00520">ipc::session::sync_io::Session_adapter&lt; Session &gt;::init_pipe()</a>, <a class="el" href="session__adapter_8hpp_source.html#l00356">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ev_wait_hndl_chan</a>, <a class="el" href="session__adapter_8hpp_source.html#l00331">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ev_wait_hndl_err</a>, <a class="el" href="session__adapter_8hpp_source.html#l00347">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_reader_chan</a>, <a class="el" href="session__adapter_8hpp_source.html#l00322">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_reader_err</a>, <a class="el" href="session__adapter_8hpp_source.html#l00350">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_writer_chan</a>, and <a class="el" href="session__adapter_8hpp_source.html#l00325">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_writer_err</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_ab32530e74cd4d2b2fc116baa93c02a18_cgraph.svg" width="720" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a93686af4c1d28eb767d1cc3ffce1794b" name="a93686af4c1d28eb767d1cc3ffce1794b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93686af4c1d28eb767d1cc3ffce1794b">&#9670;&nbsp;</a></span>Session_adapter() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename Task_err &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Session_adapter </td>
          <td>(</td>
          <td class="paramtype">flow::log::Logger *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>cli_app_ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;&#160;</td>
          <td class="paramname"><em>srv_app_ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Task_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_err_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Client_session</code> variant, forwards to its ctor of identical form, except that the handler is replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting one. </p>
<p >Do not use <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a> after this ctor, as that is for <code>Server_session</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>Logger to use for logging subsequently. </td></tr>
    <tr><td class="paramname">cli_app_ref</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
    <tr><td class="paramname">srv_app_ref</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
    <tr><td class="paramname">on_err_func</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. However in <code>*this</code> case this shall be invoked &ndash; though still only following successful <code>*_connect()</code> as usual &ndash; according to <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern, synchronously inside an async-wait performed by you and reported via <code>(*on_active_ev_func)()</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Task_err</td><td>See <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00456">456</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="session__adapter_8hpp_source.html#l00520">ipc::session::sync_io::Session_adapter&lt; Session &gt;::init_pipe()</a>, <a class="el" href="session__adapter_8hpp_source.html#l00356">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ev_wait_hndl_chan</a>, <a class="el" href="session__adapter_8hpp_source.html#l00331">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ev_wait_hndl_err</a>, <a class="el" href="session__adapter_8hpp_source.html#l00347">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_reader_chan</a>, <a class="el" href="session__adapter_8hpp_source.html#l00322">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_reader_err</a>, <a class="el" href="session__adapter_8hpp_source.html#l00350">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_writer_chan</a>, and <a class="el" href="session__adapter_8hpp_source.html#l00325">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_writer_err</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a93686af4c1d28eb767d1cc3ffce1794b_cgraph.svg" width="720" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a8b4dada833c59e6a63780dfaba4f704f" name="a8b4dada833c59e6a63780dfaba4f704f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b4dada833c59e6a63780dfaba4f704f">&#9670;&nbsp;</a></span>Session_adapter() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::Session_adapter</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Forwards to the <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> default ctor. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00422">422</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="session__adapter_8hpp_source.html#l00520">ipc::session::sync_io::Session_adapter&lt; Session &gt;::init_pipe()</a>, <a class="el" href="session__adapter_8hpp_source.html#l00356">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ev_wait_hndl_chan</a>, <a class="el" href="session__adapter_8hpp_source.html#l00331">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ev_wait_hndl_err</a>, <a class="el" href="session__adapter_8hpp_source.html#l00347">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_reader_chan</a>, <a class="el" href="session__adapter_8hpp_source.html#l00322">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_reader_err</a>, <a class="el" href="session__adapter_8hpp_source.html#l00350">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_writer_chan</a>, and <a class="el" href="session__adapter_8hpp_source.html#l00325">ipc::session::sync_io::Session_adapter&lt; Session &gt;::m_ready_writer_err</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a8b4dada833c59e6a63780dfaba4f704f_cgraph.svg" width="720" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a6a7dada7f109cd5bd999d3c08e20b179" name="a6a7dada7f109cd5bd999d3c08e20b179"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a7dada7f109cd5bd999d3c08e20b179">&#9670;&nbsp;</a></span>async_wait()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename... Args&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::async_wait </td>
          <td>(</td>
          <td class="paramtype">Args &amp;&amp;...&#160;</td>
          <td class="paramname"><em>args</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Forwards to the <a class="el" href="namespaceipc_1_1util_1_1sync__io.html#aa0b9a3cc6bdc7dedbef4f9e06851aa24" title="In sync_io pattern, concrete type storing user-supplied function invoked by pattern-implementing ipc:...">util::sync_io::Event_wait_func</a> saved in <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a>. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Args</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">args</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00709">709</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a93fc44829d49b7633d1dddfab7998f78" name="a93fc44829d49b7633d1dddfab7998f78"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93fc44829d49b7633d1dddfab7998f78">&#9670;&nbsp;</a></span>core() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;<a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">::Session_obj</a> * <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::core</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The adapted mutable <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00715">715</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a09c4ae70bece68246e64449169787a6b" name="a09c4ae70bece68246e64449169787a6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09c4ae70bece68246e64449169787a6b">&#9670;&nbsp;</a></span>core() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;<a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76">::Session_obj</a> * <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::core</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The adapted mutable <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00721">721</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a119e8c2b3a76498aa239c43e050fd349" name="a119e8c2b3a76498aa239c43e050fd349"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a119e8c2b3a76498aa239c43e050fd349">&#9670;&nbsp;</a></span>get_log_component()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">const flow::log::Component &amp; <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::get_log_component</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <code>flow::log::Log_context</code>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00733">733</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="ab779934fe031f22ed0223610cc4c9cf0" name="ab779934fe031f22ed0223610cc4c9cf0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab779934fe031f22ed0223610cc4c9cf0">&#9670;&nbsp;</a></span>get_logger()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">flow::log::Logger * <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::get_logger</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <code>flow::log::Log_context</code>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00727">727</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="af738e1f4be56643da0987fc1c0660e67" name="af738e1f4be56643da0987fc1c0660e67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af738e1f4be56643da0987fc1c0660e67">&#9670;&nbsp;</a></span>init_handlers() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename Task_err &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::init_handlers </td>
          <td>(</td>
          <td class="paramtype">Task_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_err_func_arg</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Server_session</code> variant, forwards to its method of identical form, except that the handlers are replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting ones. </p>
<p >Do not use non-default ctor before this, as that is for <code>Client_session</code>.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Task_err</td><td>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_err_func_arg</td><td>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>; in addition returns <code>false</code>/no-ops if invoked before <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00499">499</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="ae7fcf6915de1764b69d0d49abb20666e" name="ae7fcf6915de1764b69d0d49abb20666e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7fcf6915de1764b69d0d49abb20666e">&#9670;&nbsp;</a></span>init_handlers() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename Task_err , typename On_passive_open_channel_handler &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::init_handlers </td>
          <td>(</td>
          <td class="paramtype">Task_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_err_func_arg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">On_passive_open_channel_handler &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_passive_open_channel_func_arg</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compilable only when <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> is a <code>Server_session</code> variant, forwards to its method of identical form, except that the handlers are replaced with <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-adapting ones. </p>
<p >Do not use non-default ctor before this, as that is for <code>Client_session</code>.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Task_err</td><td>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>. </td></tr>
    <tr><td class="paramname">On_passive_open_channel_handler</td><td>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_err_func_arg</td><td>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>. </td></tr>
    <tr><td class="paramname">on_passive_open_channel_func_arg</td><td>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">Session_server</a>; in addition returns <code>false</code>/no-ops if invoked before <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00474">474</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a48b4b10dcb605860a58d2a394ba9c35b" name="a48b4b10dcb605860a58d2a394ba9c35b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a48b4b10dcb605860a58d2a394ba9c35b">&#9670;&nbsp;</a></span>init_pipe()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::init_pipe </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1util.html#aaf368acf8243bb25de3eef4e836c15de">util::Pipe_reader</a> *&#160;</td>
          <td class="paramname"><em>reader</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1util.html#a844d5ca9c17b672644fc8d9dbe758db0">util::Pipe_writer</a> *&#160;</td>
          <td class="paramname"><em>writer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classipc_1_1util_1_1sync__io_1_1Asio__waitable__native__handle.html">util::sync_io::Asio_waitable_native_handle</a> *&#160;</td>
          <td class="paramname"><em>ev_wait_hndl</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Utility that sets up an IPC-pipe in the given peer objects as well as loading a watcher-descriptor object for the read-end. </p>
<p >This should be called before <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a> or <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6936f814627243f273d700750def19e2" title="See, e.g., Client_session_adapter.">replace_event_wait_handles()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">reader</td><td>Pipe read end to load. It should be constructed with its intended execution context/executor but not <code>.is_open()</code>. </td></tr>
    <tr><td class="paramname">writer</td><td>Pipe write end to load. It should be constructed with its intended execution context/executor but not <code>.is_open()</code>. </td></tr>
    <tr><td class="paramname">ev_wait_hndl</td><td>Watcher for <code>reader</code>. It should be constructed with its intended execution context/executor but not <code>.is_open()</code>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00520">520</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="asio__waitable__native__hndl_8cpp_source.html#l00065">ipc::util::sync_io::Asio_waitable_native_handle::assign()</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a48b4b10dcb605860a58d2a394ba9c35b_cgraph.svg" width="536" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a48b4b10dcb605860a58d2a394ba9c35b_icgraph.svg" width="331" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a527ef097783127e73184258166a891a3" name="a527ef097783127e73184258166a891a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a527ef097783127e73184258166a891a3">&#9670;&nbsp;</a></span>on_channel_func_sio()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;<a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48">::On_channel_func</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::on_channel_func_sio</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the proper on-passive-channel-open handler to set up on the underlying <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> (<code>Client_session</code>: via ctor; <code>Server_session</code>: via <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a></code> 2-arg form). </p>
<p >The resulting handler must not be invoked before <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a> and <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af2a771da81e49f5e38774e087c448c75" title="on_passive_open_channel_func_or_empty from init_handlers() (possibly .empty() if not supplied); until...">m_on_channel_func_or_empty</a> being set; else behavior undefined.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00676">676</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="ipc__core_2src_2ipc_2util_2detail_2util_8cpp_source.html#l00067">ipc::util::pipe_produce()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a527ef097783127e73184258166a891a3_cgraph.svg" width="347" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a5bbcf8b33bc02ccb371449692d09e642" name="a5bbcf8b33bc02ccb371449692d09e642"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5bbcf8b33bc02ccb371449692d09e642">&#9670;&nbsp;</a></span>on_err_func_sio()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::async::Task_asio_err <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::on_err_func_sio</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the proper on-error handler to set up on the underlying <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> (<code>Client_session</code>: via ctor; <code>Server_session</code>: via <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a></code>). </p>
<p >The resulting handler must not be invoked before <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a> and <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a00009e3a7b3a9643af82469ec9647679" title="on_err_func from init_handlers(); .empty() until then.">m_on_err_func</a> being set; else behavior undefined.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00653">653</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="ipc__core_2src_2ipc_2util_2detail_2util_8cpp_source.html#l00067">ipc::util::pipe_produce()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a5bbcf8b33bc02ccb371449692d09e642_cgraph.svg" width="340" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a49853cc0cc44d2bb3ee20823d2b02ff5" name="a49853cc0cc44d2bb3ee20823d2b02ff5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49853cc0cc44d2bb3ee20823d2b02ff5">&#9670;&nbsp;</a></span>on_ev_channel_open()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::on_ev_channel_open</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Signaled by the function returned by <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3" title="Returns the proper on-passive-channel-open handler to set up on the underlying Session_obj (Client_se...">on_channel_func_sio()</a>, it returns the IPC-pipe to steady-state (empty, not readable), invokes the original user handler passed to <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3" title="Returns the proper on-passive-channel-open handler to set up on the underlying Session_obj (Client_se...">on_channel_func_sio()</a>, and lastly begins the next async-wait for the procedure. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00588">588</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="ipc__core_2src_2ipc_2util_2detail_2util_8cpp_source.html#l00096">ipc::util::pipe_consume()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_a49853cc0cc44d2bb3ee20823d2b02ff5_cgraph.svg" width="354" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a6936f814627243f273d700750def19e2" name="a6936f814627243f273d700750def19e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6936f814627243f273d700750def19e2">&#9670;&nbsp;</a></span>replace_event_wait_handles()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename Create_ev_wait_hndl_func &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::replace_event_wait_handles </td>
          <td>(</td>
          <td class="paramtype">const Create_ev_wait_hndl_func &amp;&#160;</td>
          <td class="paramname"><em>create_ev_wait_hndl_func</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Create_ev_wait_hndl_func</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">create_ev_wait_hndl_func</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00623">623</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="ac9ff4515c84ff66ae8eafbf102c83df0" name="ac9ff4515c84ff66ae8eafbf102c83df0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9ff4515c84ff66ae8eafbf102c83df0">&#9670;&nbsp;</a></span>start_ops()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<div class="memtemplate">
template&lt;typename Event_wait_func_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::start_ops </td>
          <td>(</td>
          <td class="paramtype">Event_wait_func_t &amp;&amp;&#160;</td>
          <td class="paramname"><em>ev_wait_func</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Client__session__adapter.html" title="sync_io-pattern counterpart to async-I/O-pattern session::Client_session types and all their SHM-awar...">Client_session_adapter</a>. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Event_wait_func_t</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ev_wait_func</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00542">542</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">References <a class="el" href="ipc__core_2src_2ipc_2util_2detail_2util_8cpp_source.html#l00096">ipc::util::pipe_consume()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1sync__io_1_1Session__adapter_ac9ff4515c84ff66ae8eafbf102c83df0_cgraph.svg" width="346" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="acff016523b1b1cff00f6d44a47cc9426" name="acff016523b1b1cff00f6d44a47cc9426"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acff016523b1b1cff00f6d44a47cc9426">&#9670;&nbsp;</a></span>m_async_io</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acd918fba6fb3c43feefdcf7719d527c9">Async_io_obj</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_async_io</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This guy does all the work. In our dtor this will be destroyed (hence thread stopped) first-thing. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00416">416</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="af305212e9de780ac16f4bfed4a666f7f" name="af305212e9de780ac16f4bfed4a666f7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af305212e9de780ac16f4bfed4a666f7f">&#9670;&nbsp;</a></span>m_ev_hndl_task_engine_unused</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::util::Task_engine <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ev_hndl_task_engine_unused</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The <code>Task_engine</code> for <code>m_ev_wait_hndl_*</code>, unless it is replaced via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6936f814627243f273d700750def19e2" title="See, e.g., Client_session_adapter.">replace_event_wait_handles()</a>. </p>
<p >This is to fulfill the <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00314">314</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="ad234c5fbbbd01b0c8b3f3edfa02f1cb0" name="ad234c5fbbbd01b0c8b3f3edfa02f1cb0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad234c5fbbbd01b0c8b3f3edfa02f1cb0">&#9670;&nbsp;</a></span>m_ev_wait_func</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1util_1_1sync__io.html#aa0b9a3cc6bdc7dedbef4f9e06851aa24">util::sync_io::Event_wait_func</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ev_wait_func</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Function (set forever in <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ac9ff4515c84ff66ae8eafbf102c83df0" title="See, e.g., Client_session_adapter.">start_ops()</a>) through which we invoke the outside event loop's async-wait facility for descriptors/events relevant to our ops. </p>
<p >See <a class="el" href="namespaceipc_1_1util_1_1sync__io.html#aa0b9a3cc6bdc7dedbef4f9e06851aa24" title="In sync_io pattern, concrete type storing user-supplied function invoked by pattern-implementing ipc:...">util::sync_io::Event_wait_func</a> doc header for a refresher on this mechanic. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00363">363</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a8e4d1659efd084274bcea1bbcee88533" name="a8e4d1659efd084274bcea1bbcee88533"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e4d1659efd084274bcea1bbcee88533">&#9670;&nbsp;</a></span>m_ev_wait_hndl_chan</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1util_1_1sync__io_1_1Asio__waitable__native__handle.html">util::sync_io::Asio_waitable_native_handle</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ev_wait_hndl_chan</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Descriptor waitable by outside event loop async-waits &ndash; storing the same <code>Native_handle</code> as (and thus being used to wait on events from) <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00356">356</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>

</div>
</div>
<a id="a23a9d957374f24739147bbda694e7b8b" name="a23a9d957374f24739147bbda694e7b8b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23a9d957374f24739147bbda694e7b8b">&#9670;&nbsp;</a></span>m_ev_wait_hndl_err</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1util_1_1sync__io_1_1Asio__waitable__native__handle.html">util::sync_io::Asio_waitable_native_handle</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ev_wait_hndl_err</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Descriptor waitable by outside event loop async-waits &ndash; storing the same <code>Native_handle</code> as (and thus being used to wait on events from) <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24" title="Read-end of IPC-pipe used by *this used to detect that the error-wait has completed.">m_ready_reader_err</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00331">331</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>

</div>
</div>
<a id="af0b0e94d115b13c6a5b5bfde46702320" name="af0b0e94d115b13c6a5b5bfde46702320"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0b0e94d115b13c6a5b5bfde46702320">&#9670;&nbsp;</a></span>m_nb_task_engine</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::util::Task_engine <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_nb_task_engine</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The <code>Task_engine</code> for <code>m_ready_*</code>. </p>
<p >It is necessary to construct those pipe-end objects, but we never use that guy's <code>-&gt;async_*()</code> APIs &ndash; only non-blocking operations, essentially leveraging boost.asio's portable transmission APIs but not its actual, um, async-I/O abilities in this case. Accordingly we never load any tasks onto <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af0b0e94d115b13c6a5b5bfde46702320" title="The Task_engine for m_ready_*.">m_nb_task_engine</a> and certainly never <code>.run()</code> (or <code>.poll()</code> or ...) it.</p>
<p >In the <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern the user's outside event loop is responsible for awaiting readability/writability of a guy like <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a> via our exporting of its <code>.native_handle()</code>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00307">307</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="af2a771da81e49f5e38774e087c448c75" name="af2a771da81e49f5e38774e087c448c75"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af2a771da81e49f5e38774e087c448c75">&#9670;&nbsp;</a></span>m_on_channel_func_or_empty</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48">On_channel_func</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_on_channel_func_or_empty</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p><code>on_passive_open_channel_func_or_empty</code> from <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a> (possibly <code>.empty()</code> if not supplied); until then <code>.empty()</code>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00372">372</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a00009e3a7b3a9643af82469ec9647679" name="a00009e3a7b3a9643af82469ec9647679"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a00009e3a7b3a9643af82469ec9647679">&#9670;&nbsp;</a></span>m_on_err_func</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::async::Task_asio_err <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_on_err_func</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p><code>on_err_func</code> from <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae7fcf6915de1764b69d0d49abb20666e" title="Compilable only when Session_obj is a Server_session variant, forwards to its method of identical for...">init_handlers()</a>; <code>.empty()</code> until then. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00366">366</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a95ca5ad4d856f3921b9e0b3accf7b618" name="a95ca5ad4d856f3921b9e0b3accf7b618"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95ca5ad4d856f3921b9e0b3accf7b618">&#9670;&nbsp;</a></span>m_ready_reader_chan</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1util.html#aaf368acf8243bb25de3eef4e836c15de">util::Pipe_reader</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ready_reader_chan</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Read-end of IPC-pipe used by <code>*this</code> used to detect that a channel-open-wait has completed. </p>
<p >The signal byte is read out of <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a>, after it was written there via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d" title="Write-end of IPC-pipe together with m_ready_reader_chan.">m_ready_writer_chan</a>. As explained in <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad26ef2d688edc711821951d00101ccae" title="Queue of On_channel_func handler arg sets received from async-I/O Session_obj – meaning the Session,...">m_target_channel_open_q</a> doc header, channel-opens can occur at any time from another thread, even while <code>*this</code> is synchronously dealing with an existing one; therefore this is a rare case where more than 1 byte could be readable at a given time. Nevertheless we issue one async-wait on <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a> per channel-open, in series; eventually all of them get popped, meaning all the channel-opens have been served.</p>
<p >This is not a rare occurrence necessarily: an opposing <code><a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a></code> user can perform 2+ <code>open_channel()</code> right in a row, and since creating a <code>Channel</code> with all its 2-4 fat peer objects can be relatively lengthy on this side, the 2nd/3rd/... on-channel-open firing can "step on" a preceding one.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d" title="Write-end of IPC-pipe together with m_ready_reader_chan.">m_ready_writer_chan</a>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00347">347</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>

</div>
</div>
<a id="a6ea8f9f021af50050dbb88bd14978e24" name="a6ea8f9f021af50050dbb88bd14978e24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ea8f9f021af50050dbb88bd14978e24">&#9670;&nbsp;</a></span>m_ready_reader_err</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1util.html#aaf368acf8243bb25de3eef4e836c15de">util::Pipe_reader</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ready_reader_err</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Read-end of IPC-pipe used by <code>*this</code> used to detect that the error-wait has completed. </p>
<p >The signal byte is detected in <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24" title="Read-end of IPC-pipe used by *this used to detect that the error-wait has completed.">m_ready_reader_err</a>. There is no need to read it, as an error can occur at most once.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a22c47810c9273ce7f86b85f51c474b9f" title="Write-end of IPC-pipe together with m_ready_reader_err.">m_ready_writer_err</a>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00322">322</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>

</div>
</div>
<a id="aef11d364d6df923acff043cd7b3bee1d" name="aef11d364d6df923acff043cd7b3bee1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef11d364d6df923acff043cd7b3bee1d">&#9670;&nbsp;</a></span>m_ready_writer_chan</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1util.html#a844d5ca9c17b672644fc8d9dbe758db0">util::Pipe_writer</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ready_writer_chan</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Write-end of IPC-pipe together with <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00350">350</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>

</div>
</div>
<a id="a22c47810c9273ce7f86b85f51c474b9f" name="a22c47810c9273ce7f86b85f51c474b9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22c47810c9273ce7f86b85f51c474b9f">&#9670;&nbsp;</a></span>m_ready_writer_err</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1util.html#a844d5ca9c17b672644fc8d9dbe758db0">util::Pipe_writer</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_ready_writer_err</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Write-end of IPC-pipe together with <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a6ea8f9f021af50050dbb88bd14978e24" title="Read-end of IPC-pipe used by *this used to detect that the error-wait has completed.">m_ready_reader_err</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00325">325</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="session__adapter_8hpp_source.html#l00422">ipc::session::sync_io::Session_adapter&lt; Session &gt;::Session_adapter()</a>.</p>

</div>
</div>
<a id="ad26ef2d688edc711821951d00101ccae" name="ad26ef2d688edc711821951d00101ccae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad26ef2d688edc711821951d00101ccae">&#9670;&nbsp;</a></span>m_target_channel_open_q</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ae6a66562d53b886d72e3edc875911b11">Channel_open_result_q</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_target_channel_open_q</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Queue of <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ab0028c9cad3d0d254b3cbb20d27e0c48" title="Short-hand for passive-channel-open handler.">On_channel_func</a> handler arg sets received from async-I/O <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> &ndash; meaning the <code><a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a></code>, in unspecified background thread, informing us (which we signal via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d" title="Write-end of IPC-pipe together with m_ready_reader_chan.">m_ready_writer_chan</a>) a channel has been passively open &ndash; and not yet fed to <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af2a771da81e49f5e38774e087c448c75" title="on_passive_open_channel_func_or_empty from init_handlers() (possibly .empty() if not supplied); until...">m_on_channel_func_or_empty</a>. </p>
<p >Protected by <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a7212b0336f96d32d6ab36ef43e16135a" title="Protects m_target_channel_open_q, accessed from user async-wait-reporter thread; and Session_obj work...">m_target_channel_open_q_mutex</a>.</p>
<h3>Rationale</h3>
<p >There's a queue here, which stands in contrast to (as of this writing) all other <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code> pattern impls in the project, including the on-error stuff in <code>*this</code>: those always deal with a single async-op at a time, and therefore no queue is necessary (just a single arg-set; usually just an <code>Error_code</code>, sometimes with a <code>size_t sz</code> though).</p>
<p >The reason this one is different is as follows.</p><ul>
<li>It's unlike, e.g., a <code>"Client_session_adapter::async_connect()"</code>, because an async-connect is triggered by the user explicitly, which triggers a single async-wait, and we disallow in our API to trigger more, until that one completes. (Confusing note: There is no such async-connect method as of this writing, because there's no <code>async_connect()</code> on <a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>, which the latter's doc header justifies... while also noting it <em>would</em> exist, if that guy were network-enabled; we'll probably add this at some point. So pretend it did to grok this bullet point. Or just ignore it for now.)</li>
<li>It's unlike, e.g., <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a00009e3a7b3a9643af82469ec9647679" title="on_err_func from init_handlers(); .empty() until then.">m_on_err_func</a> stuff in <code>*this</code>, because while that one can indeed happen at any time from another thread &ndash; without the user explicitly beginning the async-op (it sort of begins by itself) &ndash; it can also only happen at most once per <code>*this</code> (modulo move-assignment).</li>
</ul>
<p >At any rate: the handler we register with <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#acff016523b1b1cff00f6d44a47cc9426" title="This guy does all the work. In our dtor this will be destroyed (hence thread stopped) first-thing.">m_async_io</a> &ndash; <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a527ef097783127e73184258166a891a3" title="Returns the proper on-passive-channel-open handler to set up on the underlying Session_obj (Client_se...">on_channel_func_sio()</a> &ndash; can be invoked from a background thread at any time. This triggers signaling <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a> (via <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d" title="Write-end of IPC-pipe together with m_ready_reader_chan.">m_ready_writer_chan</a>), on which there is always a <code><a class="el" href="namespaceipc_1_1session_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::session.">sync_io</a></code>-pattern async-wait outstanding. We are informed of a completed async-wait (byte is available on <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a95ca5ad4d856f3921b9e0b3accf7b618" title="Read-end of IPC-pipe used by *this used to detect that a channel-open-wait has completed.">m_ready_reader_chan</a>); we consume the byte and pop and pass the result from top of <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad26ef2d688edc711821951d00101ccae" title="Queue of On_channel_func handler arg sets received from async-I/O Session_obj – meaning the Session,...">m_target_channel_open_q</a>. Then we start another async-wait. If there are more items in the queue that were added in the meantime, the same number of bytes have been pushed into <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#aef11d364d6df923acff043cd7b3bee1d" title="Write-end of IPC-pipe together with m_ready_reader_chan.">m_ready_writer_chan</a>; so those async-waits are satisfied (in series) quickly, leading to the progressive emptying of this queue and passing along those results to <code><a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#af2a771da81e49f5e38774e087c448c75" title="on_passive_open_channel_func_or_empty from init_handlers() (possibly .empty() if not supplied); until...">m_on_channel_func_or_empty()</a></code>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00410">410</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a7212b0336f96d32d6ab36ef43e16135a" name="a7212b0336f96d32d6ab36ef43e16135a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7212b0336f96d32d6ab36ef43e16135a">&#9670;&nbsp;</a></span>m_target_channel_open_q_mutex</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::util::Mutex_non_recursive <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_target_channel_open_q_mutex</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">mutable</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Protects <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#ad26ef2d688edc711821951d00101ccae" title="Queue of On_channel_func handler arg sets received from async-I/O Session_obj – meaning the Session,...">m_target_channel_open_q</a>, accessed from user async-wait-reporter thread; and <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#abc472aaaad1fd0f07ebb0e2be5c6ac76" title="See, e.g., Client_session_adapter.">Session_obj</a> worker thread. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00413">413</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<a id="a698532c47d2962e7e60dc804ac5c4e53" name="a698532c47d2962e7e60dc804ac5c4e53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a698532c47d2962e7e60dc804ac5c4e53">&#9670;&nbsp;</a></span>m_target_err_code_err</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html">ipc::session::sync_io::Session_adapter</a>&lt; <a class="el" href="classipc_1_1session_1_1Session.html">Session</a> &gt;::m_target_err_code_err</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Result given to (or about to be given to) <a class="el" href="classipc_1_1session_1_1sync__io_1_1Session__adapter.html#a00009e3a7b3a9643af82469ec9647679" title="on_err_func from init_handlers(); .empty() until then.">m_on_err_func</a>. </p>

<p class="definition">Definition at line <a class="el" href="session__adapter_8hpp_source.html#l00375">375</a> of file <a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>session/sync_io/detail/<a class="el" href="session__adapter_8hpp_source.html">session_adapter.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu May 2 2024 23:56:39 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
